// Package models
package models

import (
	"log"

	"git.oschina.net/baayso/gobms/core/utils"
)

type User struct {
	Id         string // 用户编号
	LoginName  string // 登录名
	Username   string // 用户名
	Password   string // 用户密码
	Gender     string // 用户性别，M 表示男，F 表示女
	Birthday   string // 用户出生日期
	Tel        string // 用户电话
	Address    string // 用户地址
	RoleId     string // 外键，对应角色表的id
	CreateTime string // 用户创建时间
	Role       *Role  // 对应的角色
}

// 查询用户列表
func SelectUserList() []*User {
	sql := "SELECT id, login_name, username, password, gender, birthday, tel, address, role_id, create_time FROM t_user ORDER BY create_time"

	rows, err := db.Query(sql)
	utils.CheckError(err)
	defer rows.Close()

	var users []*User // 存储查询到的用户列表

	for rows.Next() {
		user := &User{}
		err = rows.Scan(&user.Id, &user.LoginName, &user.Username, &user.Password, &user.Gender, &user.Birthday, &user.Tel, &user.Address, &user.RoleId, &user.CreateTime)
		utils.CheckError(err)

		users = append(users, user)
	}

	return users
}

// 分页查询用户列表
func SelectPaginationUserList(pageNum, pageSize int, sqlHelper *utils.SqlHelper) *Page {
	sql := sqlHelper.GetMySQLPaginationQueryListSql(pageNum, pageSize)
	params := sqlHelper.Parameters

	log.Printf("Pagination Query SQL: %s", sql)

	rows, err := db.Query(sql, params...)
	utils.CheckError(err)
	defer rows.Close()

	var users []*User // 存储查询到的用户列表

	for rows.Next() {
		user := &User{}
		err = rows.Scan(&user.Id, &user.LoginName, &user.Username, &user.Password, &user.Gender, &user.Birthday, &user.Tel, &user.Address, &user.RoleId, &user.CreateTime)
		utils.CheckError(err)

		users = append(users, user)
	}

	rows, err = db.Query(sqlHelper.GetQueryCountSql(), params...)
	utils.CheckError(err)
	defer rows.Close()

	var totalRecord int // 存储查询到的总记录数

	for rows.Next() {
		err = rows.Scan(&totalRecord)
		utils.CheckError(err)
	}

	return NewPage(pageNum, pageSize, totalRecord, utils.ToSlice(users))
}
